//
//  AppMixer.h
//  Class for managing mixers
//  2006 John Wiggins
//
// This program is free software; you can redistribute it and/or modify  
// it under the terms of the GNU General Public License as published by  
// the Free Software Foundation; either version 2 of the License, or     
// (at your option) any later version.                                   
// 
// This program is distributed in the hope that it will be useful,       
// but WITHOUT ANY WARRANTY; without even the implied warranty of        
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         
// GNU General Public License for more details.                          
//     
//     You should have received a copy of the GNU General Public License     
//     along with this program; if not, write to the                         
//         Free Software Foundation, Inc.,                                       
//         59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  
//-------------------------------------------------------------
#ifndef APP_MIXER_H
#define APP_MIXER_H
//-------------------------------------------------------------
#include <vector>

#include "App/AppPlugin.h"
//-------------------------------------------------------------
class AppMixer
{
public:
                    AppMixer        ( ge_mixer_plugin *mixer );
                    ~AppMixer       ();
    
    void            mix             ( uint32 numSrcs, RenSurface **srcList );
    RenSurface *    getSurface      ();
    
    void            addFilter       ( ge_filter_plugin *filt, ge_filter_plugin *before );
    void            removeFilter    ( ge_filter_plugin *filt );

private:
    
    unsigned int                        mWorkSurface;
    unsigned int                        mScratchSurface;
    ge_mixer_plugin *                   mMixerPlugin;
    std::vector<ge_filter_plugin *>     mFiltList;
    std::vector<RenSurface *>           mSurfacePool;
};
//-------------------------------------------------------------
RenSurface *
AppMixer::getSurface()
{
    return mSurfacePool[ mWorkSurface ];
}
//-------------------------------------------------------------
#endif // APP_MIXER_H

